﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 保持半径行为 - 限制个体在指定区域内活动
/// 当个体接近区域边界时，产生向内的力使其返回区域中心
/// 可在编辑器中创建：Create > Flock > Behavior > Stay In Radius
/// </summary>
[CreateAssetMenu(menuName = "Flock/Behavior/Stay In Radius")]
public class StayInRadiusBehavior : FlockBehavior
{
    [Header("区域设置")]
    [Tooltip("区域的中心点")]
    public Vector2 center;
    
    [Tooltip("区域的半径")]
    public float radius = 15f;

    /// <summary>
    /// 计算保持半径行为的移动向量
    /// 当个体接近边界时，产生向内的力使其返回区域
    /// </summary>
    /// <param name="agent">当前个体</param>
    /// <param name="context">邻居对象列表（此行为不使用）</param>
    /// <param name="flock">所属群体（此行为不使用）</param>
    /// <returns>保持半径行为的移动向量</returns>
    public override Vector2 CalculateMove(FlockAgent agent, List<Transform> context, Flock flock)
    {
        // 计算从个体到区域中心的向量
        Vector2 centerOffset = center - (Vector2)agent.transform.position;
        
        // 计算距离比例（0表示在中心，1表示在边界）
        float t = centerOffset.magnitude / radius;
        
        // 如果距离比例小于0.9，表示在安全区域内，无需调整
        if (t < 0.9f)
        {
            return Vector2.zero;
        }

        // 使用平方函数增强边界附近的力，使个体更强烈地被拉回
        return centerOffset * t * t;
    }
}
